{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# The Mini Inception--结课论文\r\n",
    "\r\n",
    "> **本网页为生产实习结课论文线上展示页，未经作者允许，不得转载**"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Copyright\r\n",
    "Copyright 2021 by Algebra-FUN(樊一飞)\r\n",
    "\r\n",
    "ALL RIGHTS RESERVED."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 引言\r\n",
    "\r\n",
    "随着今年来信息技术的蓬勃发展，在工业场景中，产生大量的图片数据，由于其数量巨大，传统的人工识别已经无法满足工业界的需求，所以此时人们必须寻求一种有效的计算机算法来辅助进行图片的识别与分析，这凸显了计算机视觉领域发展的重要性与必要性。\r\n",
    "\r\n",
    "卷积神经网络是人工神经网络中的一种，也是处理计算机视觉问题的一个重要工具，所以研究好卷积神经网络是十分重要的。卷积神经网络（Convolutional Neural Network，CNN）是一种前馈神经网络，它由若干卷积层和池化层组成，尤其在图像处理方面CNN的表现十分出色。\r\n",
    "\r\n",
    "本文通过将通过对经典传统卷积神经网络进行一定的修改，以更好的解决相关的计算机视觉问题。并将改进的模型通过PyTorch进行代码编写，在提升理论能力的同时锻炼实践能力。\r\n",
    "\r\n",
    "## 算法介绍\r\n",
    "\r\n",
    "本文基于经典的卷积神经网络`LeNet`，进行了一些改进，目标是一定程度上提高网络模型的预测准确率。"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 导入数据集和数据预处理\r\n",
    "\r\n",
    "### 数据集\r\n",
    "\r\n",
    "本文采用`MNIST`手写数字数据集，训练集为6000张$28\\times 28$的黑白手写数字图片，测试集为1000张$28\\times 28$的黑白手写数字图片\r\n",
    "\r\n",
    "### 数据预处理\r\n",
    "\r\n",
    "为提高模型泛化能力，本文对训练集做如下处理：\r\n",
    "\r\n",
    "1. 随机水平翻转`RandomHorizontalFlip`\r\n",
    "2. 随机调整图片灰度`RandomGrayscale`\r\n",
    "\r\n",
    "直接使用`torchvision.transforms`[3]进行训练集预处理"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "source": [
    "import torch\r\n",
    "from torch import nn,optim\r\n",
    "from torch.autograd import Variable\r\n",
    "from torch.nn import functional as F, Sequential as Seq, Module\r\n",
    "from torchvision import datasets,transforms\r\n",
    "from torch.utils.data import Dataset,DataLoader\r\n",
    "\r\n",
    "\r\n",
    "train_data_transformer = transforms.Compose([\r\n",
    "     transforms.RandomHorizontalFlip(),\r\n",
    "     transforms.RandomGrayscale(),\r\n",
    "     transforms.ToTensor()\r\n",
    "    ])\r\n",
    "\r\n",
    "train_data = datasets.MNIST(\r\n",
    "    root=\"data\",\r\n",
    "    train=True,\r\n",
    "    download=True,\r\n",
    "    transform=train_data_transformer\r\n",
    ")\r\n",
    "\r\n",
    "\r\n",
    "test_data = datasets.MNIST(\r\n",
    "    root=\"data\",\r\n",
    "    train=False,\r\n",
    "    download=True,\r\n",
    "    transform=transforms.ToTensor()\r\n",
    ")\r\n",
    "\r\n",
    "batch_size = 64\r\n",
    "\r\n",
    "train_dataloader = DataLoader(train_data, batch_size=batch_size)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 核心模块"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### Inception 模块\r\n",
    "\r\n",
    "本文按照`InceptionNet`的思路，实现一个简单的$1\\times1,3\\times3,5\\times5,MaxPool$的并行排列网络结构\r\n",
    "\r\n",
    "<img src=\"Figs\\MiniInceptionArchi.png\" style=\"zoom: 60%;\" />\r\n",
    "\r\n",
    "通过这种卷积排列方式，输入信息可以同时通过3个大小不同的卷积操作，使得网络同时具备$1\\times1,3\\times3,5\\times5$的感受野，从而提取到不同尺度的更多特征，同时也可以降低对卷积核大小超参选取的依赖性。一方面增加了网络的宽度，另一方面同时网络中的卷积的大小不一样，可以增加网络对不同尺度的适应性。"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "source": [
    "class Inception(Module):\r\n",
    "    def __init__(self,input_channel):\r\n",
    "        super().__init__()\r\n",
    "        self.conv1x1 = nn.Conv2d(input_channel,16,1)\r\n",
    "        self.conv3x3 = nn.Conv2d(input_channel,16,3,padding=1)\r\n",
    "        self.conv5x5 = nn.Conv2d(input_channel,16,5,padding=2)\r\n",
    "        self.maxpool3x3 = Seq(nn.MaxPool2d(3,1,padding=1),nn.Conv2d(input_channel,16,1))\r\n",
    "        self.branches = (self.conv1x1,self.conv3x3,self.conv5x5,self.maxpool3x3)\r\n",
    "        \r\n",
    "    def forward(self,x):\r\n",
    "        return torch.cat([branch(x) for branch in self.branches],dim=1)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### FocalLoss 模块\r\n",
    "\r\n",
    "`FocalLoss`是对标准的`CrossEntropyLoss`的一种改进，其目的是解决训练期间的类不平衡问题。`FocalLoss`在交叉熵损失公式中加入一个调整项，以便将学习重点放在难以学习的样本上。\r\n",
    "\r\n",
    "一般地，`CrossEntropyLoss`为：\r\n",
    "$$\r\n",
    "CEL(p_t)=-\\log(p_t)\r\n",
    "$$\r\n",
    "而改进的`FocalLoss`为：\r\n",
    "$$\r\n",
    "FL(p_t)=-(1-p_t)^\\gamma\\log(p_t)\r\n",
    "$$\r\n",
    "本文选取经验最优值$\\gamma=2$"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "source": [
    "class FocalLoss(Module):\r\n",
    "    def __init__(self,gamma=2,reduction='mean'):\r\n",
    "        super().__init__()\r\n",
    "        self.gamma = gamma\r\n",
    "        self.reduction = reduction\r\n",
    "        \r\n",
    "    def forward(self,x,classes):\r\n",
    "        pred_softmax = F.softmax(x,dim=1)\r\n",
    "        pred_softmax_classes = pred_softmax.gather(1,classes.view(-1,1))\r\n",
    "        result = -(1-pred_softmax_classes)**self.gamma*torch.log(pred_softmax_classes)\r\n",
    "        if self.reduction == 'mean':\r\n",
    "            return result.mean()\r\n",
    "        if self.reduction == 'sum':\r\n",
    "            return result.sum()"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 构建网络模型\r\n",
    "\r\n",
    "模型网络结构如下图所示\r\n",
    "\r\n",
    "<img src=\"Figs\\NetworkArchi.png\" alt=\"50%\" style=\"zoom:85%;\" />\r\n",
    "\r\n",
    "本文将`LeNet`中第一个$5\\times5$卷积分解为两个$3\\times3$卷积，提高网络深度，同时降低计算量\r\n",
    "\r\n",
    "将第二个$5\\times5$卷积替换为$Inception$模块\r\n",
    "\r\n",
    "模型还使用`Batch Norm` 和 `Dropout` 来提高网络泛化能力"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "source": [
    "class MiniInception(Module):\r\n",
    "    def __init__(self):\r\n",
    "        super().__init__()\r\n",
    "        self.conv = Seq(\r\n",
    "            # 1@28x28\r\n",
    "            nn.Conv2d(1,8,3),\r\n",
    "            # 8@28x28\r\n",
    "            nn.Conv2d(8,16,3),\r\n",
    "            # 16@24x24\r\n",
    "            nn.MaxPool2d(2,2), \r\n",
    "            # 16@12x12\r\n",
    "            nn.BatchNorm2d(16),\r\n",
    "            nn.ReLU(),\r\n",
    "            # 16@12x12\r\n",
    "            Inception(16),\r\n",
    "            # 64@12x12\r\n",
    "            nn.MaxPool2d(3,3),\r\n",
    "            # 64@4x4\r\n",
    "            nn.BatchNorm2d(64),\r\n",
    "            nn.ReLU(),\r\n",
    "            # 64@4x4\r\n",
    "        )\r\n",
    "        self.fc = Seq(\r\n",
    "            nn.Linear(64 * 4 * 4, 256),\r\n",
    "            nn.ReLU(),\r\n",
    "            nn.Dropout(),\r\n",
    "            nn.Linear(256,10),\r\n",
    "#             nn.Linear(64 * 4 * 4, 10),\r\n",
    "            nn.Softmax(dim=1)\r\n",
    "        )\r\n",
    "    \r\n",
    "    def forward(self,x):\r\n",
    "        x = self.conv(x)\r\n",
    "        x = x.view(-1, 64 * 4 * 4)\r\n",
    "        x = self.fc(x)\r\n",
    "        return x\r\n",
    "    \r\n",
    "    def predict(self,x):\r\n",
    "        return self(x).argmax(dim=1)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "source": [
    "def train(dataloader, model, loss_fn, optimizer):\r\n",
    "    size = len(dataloader.dataset)\r\n",
    "    model.train()\r\n",
    "    for batch, (X, y) in enumerate(dataloader):\r\n",
    "        pred = model(X)\r\n",
    "        loss = loss_fn(pred, y)\r\n",
    "\r\n",
    "        optimizer.zero_grad()\r\n",
    "        loss.backward()\r\n",
    "        optimizer.step()\r\n",
    "\r\n",
    "        if batch % 100 == 0:\r\n",
    "            loss, current = loss.item(), batch * len(X)\r\n",
    "            print(f\"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]\")\r\n",
    "            \r\n",
    "def test(model,test_data,loss_fn):\r\n",
    "    test_dataloader = DataLoader(test_data,batch_size=len(test_data))\r\n",
    "    model.eval()\r\n",
    "    with torch.no_grad():\r\n",
    "        for data,gt in test_dataloader:\r\n",
    "            pred = model(data)\r\n",
    "            n = len(gt)\r\n",
    "            loss = loss_fn(pred,gt).item()\r\n",
    "            return sum(pred.argmax(dim=1)==gt).item()/n,loss/n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 训练模型\r\n",
    "\r\n",
    "使用`Adam`优化算法作为优化器，参数学习率设为$lr=0.0003$；使用`FocalLoss`作为损失函数"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "source": [
    "model = MiniInception()\r\n",
    "# criterion = nn.CrossEntropyLoss()\r\n",
    "criterion = FocalLoss()\r\n",
    "optimizer = optim.Adam(model.parameters(),lr=.0003)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "source": [
    "train_verbose = []\r\n",
    "test_verbose = []\r\n",
    "epochs = 7\r\n",
    "for epoch in range(epochs):\r\n",
    "    print(f\"Epoch {epoch+1}\\n-------------------------------\")\r\n",
    "    train(train_dataloader, model, criterion, optimizer)\r\n",
    "    correct,loss = test(model,test_data,criterion)\r\n",
    "    test_verbose.append((correct,loss))\r\n",
    "    print(f\"Test Error: \\n Accuracy: {(100*correct):>0.2f}%, Avg loss: {loss:>10f} \\n\")\r\n",
    "    correct,loss = test(model,train_data,criterion)\r\n",
    "    train_verbose.append((correct,loss))\r\n",
    "    print(f\"Train Error: \\n Accuracy: {(100*correct):>0.2f}%, Avg loss: {loss:>10f} \\n\")\r\n",
    "print(\"Done!\")"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Epoch 1\n",
      "-------------------------------\n",
      "loss: 1.874268  [    0/60000]\n",
      "loss: 1.149189  [ 6400/60000]\n",
      "loss: 1.091419  [12800/60000]\n",
      "loss: 0.978976  [19200/60000]\n",
      "loss: 1.042264  [25600/60000]\n",
      "loss: 0.988840  [32000/60000]\n",
      "loss: 0.966481  [38400/60000]\n",
      "loss: 0.958035  [44800/60000]\n",
      "loss: 0.973559  [51200/60000]\n",
      "loss: 0.953318  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 95.64%, Avg loss:   0.000092 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 95.58%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 2\n",
      "-------------------------------\n",
      "loss: 0.928505  [    0/60000]\n",
      "loss: 0.922106  [ 6400/60000]\n",
      "loss: 0.940118  [12800/60000]\n",
      "loss: 0.907674  [19200/60000]\n",
      "loss: 0.954526  [25600/60000]\n",
      "loss: 0.924731  [32000/60000]\n",
      "loss: 0.918796  [38400/60000]\n",
      "loss: 0.913824  [44800/60000]\n",
      "loss: 0.905266  [51200/60000]\n",
      "loss: 0.885337  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.18%, Avg loss:   0.000090 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 97.21%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 3\n",
      "-------------------------------\n",
      "loss: 0.906601  [    0/60000]\n",
      "loss: 0.931560  [ 6400/60000]\n",
      "loss: 0.898033  [12800/60000]\n",
      "loss: 0.877442  [19200/60000]\n",
      "loss: 0.915734  [25600/60000]\n",
      "loss: 0.913114  [32000/60000]\n",
      "loss: 0.907968  [38400/60000]\n",
      "loss: 0.881892  [44800/60000]\n",
      "loss: 0.904860  [51200/60000]\n",
      "loss: 0.910081  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.89%, Avg loss:   0.000089 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 97.97%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 4\n",
      "-------------------------------\n",
      "loss: 0.889284  [    0/60000]\n",
      "loss: 0.900987  [ 6400/60000]\n",
      "loss: 0.891701  [12800/60000]\n",
      "loss: 0.884210  [19200/60000]\n",
      "loss: 0.894162  [25600/60000]\n",
      "loss: 0.905629  [32000/60000]\n",
      "loss: 0.932034  [38400/60000]\n",
      "loss: 0.888315  [44800/60000]\n",
      "loss: 0.920982  [51200/60000]\n",
      "loss: 0.909180  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.95%, Avg loss:   0.000089 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 98.09%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 5\n",
      "-------------------------------\n",
      "loss: 0.873771  [    0/60000]\n",
      "loss: 0.901839  [ 6400/60000]\n",
      "loss: 0.911265  [12800/60000]\n",
      "loss: 0.889208  [19200/60000]\n",
      "loss: 0.889569  [25600/60000]\n",
      "loss: 0.897478  [32000/60000]\n",
      "loss: 0.917159  [38400/60000]\n",
      "loss: 0.879085  [44800/60000]\n",
      "loss: 0.897105  [51200/60000]\n",
      "loss: 0.888916  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 98.12%, Avg loss:   0.000089 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 98.31%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 6\n",
      "-------------------------------\n",
      "loss: 0.866199  [    0/60000]\n",
      "loss: 0.900599  [ 6400/60000]\n",
      "loss: 0.898666  [12800/60000]\n",
      "loss: 0.874123  [19200/60000]\n",
      "loss: 0.871374  [25600/60000]\n",
      "loss: 0.886028  [32000/60000]\n",
      "loss: 0.917548  [38400/60000]\n",
      "loss: 0.863283  [44800/60000]\n",
      "loss: 0.921623  [51200/60000]\n",
      "loss: 0.908457  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 98.36%, Avg loss:   0.000088 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 98.60%, Avg loss:   0.000015 \n",
      "\n",
      "Epoch 7\n",
      "-------------------------------\n",
      "loss: 0.867356  [    0/60000]\n",
      "loss: 0.898066  [ 6400/60000]\n",
      "loss: 0.894893  [12800/60000]\n",
      "loss: 0.881000  [19200/60000]\n",
      "loss: 0.865909  [25600/60000]\n",
      "loss: 0.911724  [32000/60000]\n",
      "loss: 0.903895  [38400/60000]\n",
      "loss: 0.880438  [44800/60000]\n",
      "loss: 0.903512  [51200/60000]\n",
      "loss: 0.878277  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 98.49%, Avg loss:   0.000088 \n",
      "\n",
      "Train Error: \n",
      " Accuracy: 98.84%, Avg loss:   0.000015 \n",
      "\n",
      "Done!\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "经过7个epoch的训练，最终训练准确率达到98.84%"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 可视化训练"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "source": [
    "from matplotlib import pyplot as plt\r\n",
    "import numpy as np\r\n",
    "\r\n",
    "def extract(index,li):\r\n",
    "    return [item[index] for item in li]\r\n",
    "\r\n",
    "train_verbose_loss = extract(1,train_verbose)\r\n",
    "test_verbose_loss = extract(1,test_verbose)\r\n",
    "train_verbose_accuracy = extract(0,train_verbose)\r\n",
    "test_verbose_accuray = extract(0,test_verbose)\r\n",
    "xs = list(range(1,epochs+1))\r\n",
    "\r\n",
    "fig,axes = plt.subplots(1,2)\r\n",
    "axes[1].set_title('loss')\r\n",
    "axes[0].set_title('accuray')\r\n",
    "axes[1].plot(xs,train_verbose_loss,label='train')\r\n",
    "axes[1].plot(xs,test_verbose_loss,label='test')\r\n",
    "axes[0].plot(xs,train_verbose_accuracy,label='train')\r\n",
    "axes[0].plot(xs,test_verbose_accuray,label='test')\r\n",
    "plt.legend()\r\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 可视化测试\r\n",
    "\r\n",
    "使用测试集进行测试，最终测试准确率达到98.49%，并选取测试集部分进行训练结果可视化"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "source": [
    "cnums = 6\r\n",
    "rnums = 3\r\n",
    "fig,axes = plt.subplots(rnums,cnums)\r\n",
    "for i,(X,y) in enumerate(DataLoader(test_data,batch_size = 1)):\r\n",
    "    r =int(i / cnums)\r\n",
    "    c = i % cnums\r\n",
    "    if r >= rnums:\r\n",
    "        break\r\n",
    "    axes[r][c].imshow(X.view(28,28))\r\n",
    "    axes[r][c].get_xaxis().set_visible(False)\r\n",
    "    axes[r][c].get_yaxis().set_visible(False)\r\n",
    "    axes[r][c].set_title(f'pred:{model.predict(X).item()}')\r\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 18 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 结论\r\n",
    "\r\n",
    "本文提出的模型可以较好的完成手写数字识别的任务，并超越了课上所给出的模型。"
   ],
   "metadata": {}
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}